iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
Python

時空序列分析-關鍵籌碼分析系列 第 14

含金量滿滿的文章? Step(2/4): 關鍵分點籌碼爬蟲,券商分點地圖視覺化

  • 分享至 

  • xImage
  •  

昨天將券商分點的地理位置處理過,再用google map API 把經緯度爬下來,

今天來把這些資料,視覺化成券商分點地圖

這邊除了會用matplotlib以外,還會用到folium用來繪製互動式網頁地圖

Folium是一套Python上的地圖視覺化工具。透過Leaflet這個JavaScript Library以及OpenStreetMap地圖服務,可在Jupyter Notebook上實現互動式地圖繪製。

延續昨天,我先用PLUS_lat_lng_address.xlsx 這個檔案,

券商代碼 券商名稱 開業日 地址 緯度 經度
1020 合庫 2011-12-02 00:00:00 台北市大安區忠孝東路四段285號 25.0416821 121.5542213
1021 合庫- 台中 2011-12-02 00:00:00 台中市西區民權路91號 24.1380648 120.6795332
1022 合庫-台南 2011-12-02 00:00:00 台南市北區成功路48號 22.9981399 120.2077419
1023 合庫-高雄 2011-12-02 00:00:00 高雄市大勇路97號 22.6247854 120.28419

只保留券商代碼緯度經度,另存成一個新的資料表,命名成lat_lng_New.xlsx

import pandas as pd
# 讀出來看一下資料長怎樣
data = pd.read_excel('E:/時空資料分析/關鍵分點籌碼分析_實測/lat_lng_New.xlsx')
data

df = pd.DataFrame(data)
df

券商代碼 lat lng
0 1020 25.041682 121.554221
1 1021 24.138065 120.679533
2 1022 22.998140 120.207742
3 1023 22.624785 120.284190
4 1024 23.480549 120.448310
... ... ... ...
842 9A9W 24.159410 120.639591
843 9A9x 24.991026 121.308015
844 9A9X 24.799845 120.989694
845 9A9Y 25.012994 121.468181
846 9A9Z 25.056481 121.549584
847 rows × 3 columns

Folium 繪製互動式地圖

台灣的經緯度範圍是北緯22~25°N、東經120~122°E
接著安裝一下folium

pip install folium

引用進來開始操作

import folium

# 地圖初始化,設定初始位置和縮放等級
taiwan_map = folium.Map(location=[23.5, 121], zoom_start=7)

# 用for迴圈跑,把資料標記到到地圖上
for index, row in df.iterrows():
    folium.Marker(
        location=[row['lat'], row['lng']],
        
        #popup 是當點擊標記時,會顯示的名稱,這邊放券商代碼
        popup=f"券商代碼: {row['券商代碼']}",
        icon=folium.Icon(color='blue', icon='info-sign')
    ).add_to(taiwan_map)

# 保存地圖成HTML
taiwan_map.save('taiwan_brokers_map.html')

成功的話,到資料夾點開taiwan_brokers_map.html
就可以得到一張可以滑動、縮放的地圖(如下圖)
https://ithelp.ithome.com.tw/upload/images/20240813/20168322UEqHQFE36b.png
可以看到連澎湖、金門都有券商分點的據點。

folium還有很多其他的玩法和呈現模式,可以多去研究玩看看~

Matplotlib

接著再用matplotlib簡單畫一張平面2D圖

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# 設定字體
zhfont = fm.FontProperties(fname=r'C:\Windows\Fonts\kaiu.ttf')  # 使用原始字串
plt.rcParams['font.family'] = zhfont.get_name()
## 圖像大小10*10,配合ConvLSTM模型
plt.figure(figsize=(10, 10))

# 用散佈圖畫,cmap可以調整想要的顏色
plt.scatter(df['lng'], df['lat'],c=df['lat'],marker='o', cmap='summer', label='券商位置')

# 添加券商代碼的標簽
for i, txt in enumerate(df['券商代碼']):
    plt.annotate(txt, (df['lng'][i], df['lat'][i]), textcoords="offset points", xytext=(0,10), ha='center')
# 標題名稱和X、Y軸的名稱
plt.title('券商位置分布',fontproperties=zhfont)
plt.xlabel('經度 (lng)',fontproperties=zhfont)
plt.ylabel('緯度 (lat)',fontproperties=zhfont)

# 顯示圖例在左下角
plt.legend(loc='lower left', frameon=True)

plt.savefig('broker_locations.png')
plt.show()

畫圖的用義不只是可以讓資料閱讀起來更直觀、方便,

還有為了變成合適的圖像大小,作為ConvLSTM模型的輸入。


參考文章&資料來源:
1.Python 地圖視覺化- 使用Folium
2.玩玩看地理空間資料!(4) — Folium互動式地圖
3.folium-documentation-Getting Started

每日記錄:
加權指數:收在22027.25點,上漲230.68點,開高走低。
美股因為CPI低於預期,直接大噴發。
星巴克因為挖角一個CEO,一天漲20%好扯@@

今天只有做一點簡單的圖,最近除了在趕自己的研究,還要把學長姐的東西、paper熟悉熟悉 (好忙好忙
接下來才是重頭戲,明天見!
/images/emoticon/emoticon33.gif


上一篇
含金量滿滿的文章? Step(1/4):關鍵分點籌碼爬蟲,之前拿到的券商地點,要怎麼處理?
下一篇
含金量滿滿的文章? Step(3/4):關鍵分點的籌碼資訊,ChromeDriver你幹嘛!
系列文
時空序列分析-關鍵籌碼分析31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言